package com.bicon.botu.account.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.bicon.botu.account.dto.UserInfoDTO;
import com.bicon.botu.account.dto.UserInfoParam;
import com.bicon.botu.account.entity.UserInfo;
import com.bicon.botu.account.handler.UserInfoHandler;
import com.bicon.botu.account.mapper.UserInfoMapper;
import com.bicon.botu.account.service.IUserInfoService;
import com.bicon.botu.core.base.common.Constants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 用户中心服务接口实现类
 * @auther liushujie
 * @date 2018/07/16 11:30
 */
@Slf4j
@Service
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements IUserInfoService {

    @Autowired
    private UserInfoHandler userInfoHandler;

    /**
     * 生成用户信息
     *
     * @param userInfoParam
     * @return
     */
    @Override
    public boolean createUserInfo(UserInfoParam userInfoParam) {
        UserInfo userInfo = new UserInfo();
        userInfo.preInsert();
        BeanUtils.copyProperties(userInfoParam,userInfo);
        userInfo.setName(userInfo.getPhone());
        boolean falg = userInfo.insert();
        //缓存到Redis
        userInfoHandler.initUserInfo(userInfo.getId());
        return falg;
    }

    /**
     * 修改个人中心资料
     *
     * @param userInfoParam
     * @return
     */
    @Transactional
    @Override
    public boolean updateUserInfo(UserInfoParam userInfoParam) {
        UserInfo userInfo = new UserInfo();
        userInfo.preUpdate();
        BeanUtils.copyProperties(userInfoParam,userInfo);
        boolean falg = userInfo.updateById();
        //缓存到Redis
        userInfoHandler.initUserInfo(userInfo.getId());
        return falg;
    }

    /**
     * 分页获取用户列表
     *
     * @param name    用户名称
     * @param current 当前页
     * @param size    每页记录数
     * @return
     */
    @Override
    public Page<UserInfoDTO> getPagingResources(String name, int current, int size) {
        Page<UserInfo> userInfoPage = new UserInfo().selectPage(new Page<>(current, size), new EntityWrapper<UserInfo>().
                eq("name", name).eq("logic_delete", Constants.DEL_LOGIC_NORMAL).orderBy("create_date", true));
        Page<UserInfoDTO> userInfoDTOPage = new Page<UserInfoDTO>();
        if (null != userInfoPage) {
            BeanUtils.copyProperties(userInfoPage, userInfoDTOPage);
            return userInfoDTOPage;
        }
        return userInfoDTOPage;
    }

    /**
     * 初始化所有用户信息到缓存中
     *
     * @return
     */
    @Override
    public boolean initUserInfo() {
        userInfoHandler.initUserInfo();
        return true;
    }

    /**
     * 根据UserID获取用户信息
     *
     * @param userId
     * @return
     */
    @Override
    public UserInfo findUserInfoByUid(String userId) {
        UserInfo userInfo = new UserInfo().selectOne(new EntityWrapper<UserInfo>().eq("id",userId).eq("logic_delete", Constants.DEL_LOGIC_NORMAL));
        return userInfo;
    }

    /**
     * 获取所有用户信息
     *
     * @return
     */
    @Override
    public List<UserInfo> findAll() {
        List<UserInfo> userInfoList = new UserInfo().selectList( new EntityWrapper<UserInfo>().eq("logic_delete", Constants.DEL_LOGIC_NORMAL).orderBy("create_date", true));
        return userInfoList;
    }
}
